﻿#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:6031)

#include <stdio.h>

/* 1.1 数组的创建*/
//数组是一组相同类型元素的集合。
//type_t   arr_name   [const_n];
//type_t 是指数组的元素类型
//const_n 是一个常量表达式，用来指定数组的大小

//int main()
//{
//	int arr[10];
//	int arr1[10+5];
//	char ch[5];
//	double data[20];
//
//	//int n = 10;
//	//int arr2[n];	//会报错，其中的n是变量，此编译器的标准是在C99之前
//	//在C99标准之前，数组的大小必须是常量或者常量表达式
//	//在C99标准之后，数组的大小可以是变量，为了支持变长数组（数组的大小可通过变量指定），但是数组不能初始化。
//
//	return 0;
//}


/* 1.2 数组的初始化*/

//int main()
//{
//	int arr1[10] = { 1,2,3 };		//不完全初始化，剩余的元素默认初始化为0
//	int arr2[3] = { 1,2,3 };		//数组存放整型类型的变量时，[]里的数字写3就是完全初始化，写4就是不完全初始化，不写默认是3( 由{}里有几个常量决定 )
//
//	char arr4[3] = { 'a',98, 'c' };	
//
//	char arr5[10] = { 'a','b','c' };	//不完全初始化，剩余的元素默认初始化为'\0'
//	//注意后面会自动补7个0；若想以字符串的形式打印，后面还要加'\0'
//	char arr6[10] = "abc";	
//	//注意后面会自动补6个0
//
//	char arr7[3] = { 'a','b','c' };	//数组存放字符类型的变量时，若用单个字符初始化，[]中最低写3；或者不写
//	char arr8[4] = "abc";			//数组存放字符类型的变量时，若用字符串初始化，[]中最低写4，字符串后面默认有个\0;或者不写
//
//	printf("%s\n", arr7);		//abc+乱码,初始化arr7时在加上\0就没有乱码了
//	printf("%s\n", arr8);		//abc
//
//	return 0;
//}


/* 1.3 一维数组的使用*/

//int main()
//{
//	int arr[10] = { 1,2,3,4,5 };		//数组的不完全初始化
//	int sz = sizeof(arr) / sizeof(arr[0]);		//计算数组的元素个数
//	int i = 0;//做下标
//
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//
//	return 0;
//}

//sizeof计算的是类型所占空间的的大小（字节）；%zu打印sizeof的返回值
//sizeof(arr)计算的是整个数组所占空间的大小，因为1个整形占4个字节，若数组中有10个元素就占40个字节
//sizeof(arr[0])计算的是第一个元素类型的大小
//strlen(arr1)计算的是字符串长度（\0之前的字符串长度）


/* 1.4 一维数组在内存中的存储*/

//int main()
//{
//	int arr[10] = { 1,2,3,4,5 };		//数组的不完全初始化
//	int sz = sizeof(arr) / sizeof(arr[0]);		//计算数组的元素个数
//	int i = 0;//做下标
//
//	打印数组的每个元素的地址
//	for (i = 0; i < sz; i++)
//	{
//		printf(" &arr[%d] = %p\n",i, &arr[i]);		//%p打印地址
//		
//	}
//
//	return 0;
//}

//数组在内存中是连续存放的。